package com.kingwood.algorithm.test;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author 22025812
 * @Description: TODO
 * https://blog.csdn.net/qfc_128220/article/details/134383453
 * 在一颗树中，每个节点代表一个家庭成员，节点的数字表示其个人的财富值，一个节点及其直接相连的子节点被定义为一个小家庭。
 * 现给你一颗树，请计算出最富裕的小家庭的财富和。
 * @Date: 2024/2/26 16:17
 * @Modified By：
 * @Version 1.0
 */
public class MaxSumWealth {
    // 最富裕的小家庭
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        System.out.println(n);

        long[] wealth = new long[n + 1];
        long[] family = new long[n + 1];

        for (int i = 1; i <= n; i++) {
            wealth[i] = scanner.nextLong();
            family[i] = wealth[i];
        }

        for (int i=0; i<n-1; i++) {
            int fa = scanner.nextInt();
            int ch = scanner.nextInt();
            family[fa] += wealth[ch];
        }

        System.out.println(Arrays.stream(family).max().orElse(0));
    }
}
